這是用 Claude Code 開發後的第一個小時發生的
我請 AI 寫了 TimerManager.gd 剛進 repo,按下執行後,發現整個專案起不來:
執行專案發生錯誤 Parser Error: Could not parse global class "TimerManager" from "res://scripts/TimerManager.gd"。錯誤位置(3, 27)
Godot 的 parse error 很嚴格,一有語法錯誤,整個專案就會 Error。
原因是這一行:
_advance_state(count_as_completed: false)
這是 Python 的寫法。在 GDScript 裡,函式呼叫時加冒號會被當成型別宣告,直接解析失敗。
AI 寫這行的時候,大概是把它平常寫 Python 的習慣帶了過來,但這個語言不吃這一套。
這裡我應用了當時學習到的技巧。我打的是:
請檢討為什麼會誤用 Python 風格的具名參數
不是「幫我修好」,是「檢討為什麼」。
差別在哪?「修好」得到的是一行程式碼,「檢討為什麼」得到的是一條規則。而規則可以套用到還沒發生的錯誤上。
回應之後,Claude Code 在 ~/.claude/projects/ 底下建了一個記憶檔,內容如下:
GDScript 不支援具名參數(
func(param: value)或func(param=value))。在函式呼叫中加冒號會被解析為型別宣告,導致 Parser Error。Why: 實際發生過
_advance_state(count_as_completed: false)這樣的錯誤,導致 TimerManager 無法被 parse,整個專案啟動失敗。How to apply: 寫 GDScript 函式呼叫時只用位置參數。若想讓意圖清楚,在同一行加
#註解說明,或先用變數命名再傳入:
_advance_state(false) # 不計入完成數
18:49,修正進 repo(d5a8362),改動 4 行。
回頭查看 Sproutimer 整個專案就只有這一份記憶檔。
後面那些更值錢的教訓——透明視窗要三個設定一起開、embed_subwindows 一定要關、系統匣的坑——我都是當下解決完就走人,沒有留下任何東西。
證據是三個月後我做第四版番茄鐘,同樣的坑又在規劃文件裡被列成「風險」重新寫了一次。
第一句,在它修好 bug 之前/之後請記得多問一句:
請檢討為什麼會___
第二句,看完它的檢討之後:
把這個教訓寫成規則存起來,包含:為什麼會發生、以後遇到同類情況該怎麼做。
存下來的東西可以參考以下格式:
規則:GDScript 不支援具名參數
Why:實際發生過 _advance_state(count_as_completed: false),
導致整個專案 parse 失敗
How to apply:函式呼叫只用位置參數;想讓意圖清楚就加 # 註解
「Why」那行不能省。 只寫結論的話,AI 遇到邊界情況不知道能不能變通;把原因寫進去,它才有辦法自己判斷。
明天講同一個晚上的另一半:透明視窗。它卡了我兩天,結果問題不再程式碼中。